Technote 1070

Background-Only Applications


ñ⁄éü

äTóv

BOAÇ…Ç»ÇÈï˚ñ@

ÉoÉbÉNÉOÉâÉEÉìÉhÇÃApple eventèàóù

ÉVÉXÉeÉÄÉ\ÉtÉgÉEÉFÉA7.5.5à»ëOÇÃBOA



ÉoÉbÉNÉOÉâÉEÉìÉhÅEÉIÉìÉäÅEÉAÉvÉäÉPÅ[ÉVÉáÉìÅiBOAÅjÇÕñºëOÇÃí ÇËÅAÉoÉbÉNÉOÉâÉEÉìÉhÇÃÇ›Ç≈ìÆçÏÇ∑ÇÈMacintoshÉAÉvÉäÉPÅ[ÉVÉáÉìÇ≈Ç∑ÅBãNìÆéûÇÃèàóùÇ‚ÉVÉXÉeÉÄÇ…ÉTÅ[ÉrÉXÇíÒãüÇ∑ÇÈÇÊǧǻÉfÅ[ÉÇÉìÇê›åvÇ∑ÇÈèÍçáÇÕ'INIT'ÅAÉhÉâÉCÉoÅAíPìΔÉRÅ[ÉhÇÊÇËLJÅABOAÇçÏê¨Ç∑ÇÈÇÃÇ™ñ]NjǵǢÇ≈Ç∑ÅBDZÇÃÉeÉbÉNÉmÅ[ÉgÇÕBOAÇäJî≠Ç∑ÇÈç€ÇÃíçà”ì_Ç‚ÉAÉhÉoÉCÉXDžǬǢǃâê‡ÇµÇ‹Ç∑ÅB

DZÇÃÉeÉbÉNÉmÅ[ÉgÇÕå≥ÅXPS 02Ç≈ǵÇΩÇ™ÅAã@î\ägí£ÉAÉvÉäÉPÅ[ÉVÉáÉìÇ…égǧ'appe'ÉRÅ[ÉhÉäÉ\Å[ÉXÇÃê‡ñæÅASetApplLimit ()ÇÃè⁄ç◊ÅAÉVÉXÉeÉÄÉ\ÉtÉgÉEÉFÉA7.5.5à»ëODžǮǢǃã@î\ägí£ÉAÉvÉäÉPÅ[ÉVÉáÉìÇ…'INIT'ÉRÅ[ÉhÇí«â¡ÇµÇΩç€Ç…î≠ê∂Ç∑ÇÈÉoÉOÇÃâÒîçÙǻǫǙí«â¡Ç≥ÇÍǃǢNjÇ∑ÅBDZÇÃÉeÉbÉNÉmÅ[ÉgÇÕPS 02ÇéÊǡǃë„ÇÌÇËÇ‹Ç∑ÅB


äTóv

ÉoÉbÉNÉOÉâÉEÉìÉhÅEÉIÉìÉäÅ[ÅEÉAÉvÉäÉPÅ[ÉVÉáÉìÅiBOAÅAÉtÉFÅ[ÉXÉåÉXÅEÉoÉbÉNÉOÉâÉEÉìÉhÅEÉAÉvÉäÉPÅ[ÉVÉáÉìÅAã@î\ägí£ÉAÉvÉäÉPÅ[ÉVÉáÉìÇΔLJåæÇ§ÅjÇÕãNìÆéûÇ‚åpë±ìIÇ…ÉVÉXÉeÉÄÉTÅ[ÉrÉXÇíÒãüÇ∑ÇÈèÍçáÇ…óòópǵNjÇ∑ÅBBOAÇÕÉVÉXÉeÉÄÉ\ÉtÉgÉEÉFÉA6.xÇΔMultiFinderÇ≈LJégǶNjÇ∑Ç™ÅAÉVÉXÉeÉÄÉ\ÉtÉgÉEÉFÉA7.xÇÃÉvÉçÉZÉXä«óùÇ‚ÉvÉçÉZÉXä‘í êMã@î\ÇóòópÇ∑ÇÈÇΔçÇìxÇ»ÉVÉXÉeÉÄÉTÅ[ÉrÉXÇ™é¿åªÇ≈Ç´Ç‹Ç∑ÅB

DZÇÃÉeÉbÉNÉmÅ[ÉgÇÕBOAÇäJî≠Ç∑ÇÈç€ÇÃíçà”ì_Ç‚ÉAÉhÉoÉCÉXÇä‹Ç›Ç‹Ç∑Ç™ÅADZÇÃëºÇ…develop 9ÇÃãLéñÅuBe Our Guest: Background-Only Applications in System 7ÅvÇ‚Developer CD SeriesÇ…ä‹Ç‹ÇÍǃǢÇÈCÇΔPascalÇÃÉTÉìÉvÉãÉRÅ[ÉhÅuSmallDaemonÅvLJéQçlDžǵǃâ∫Ç≥Ç¢ÅB


BOAÇ…Ç»ÇÈï˚ñ@

BOAÇÕí èÌÇÃMacintoshÉAÉvÉäÉPÅ[ÉVÉáÉìÇÃã√èkî≈Ç≈Ç∑ÅBBOAÇÕïKÇ∏InitGraf ()ÇåƒÇ—èoǵNjÇ∑ÅiApple Event ManagerÇóòópÇ∑ÇÈÇΩÇflÇ…ïKóvÇ»QuickDrawÉOÉçÅ[ÉoÉãïœêîÇÃèâä˙âªÇ…ïKóvÇ≈Ç∑ÅjÅBǵǩǵÅAInitWindows ()ÅAInitMenus ()ǻǫÅAï`âÊÇî∫ǧâ¬î\ê´ÇÃdžÇÈÉcÅ[ÉãÉ{ÉbÉNÉXä÷êîÇÕåƒÇ—èoÇ≥ǻǢÇ≈â∫Ç≥Ç¢ÅBDZÇÍÇÕÅAíºê⁄ìIñîÇÕä‘ê⁄ìIÇ…É_ÉCÉAÉçÉOÇï\é¶Ç∑ÇÈÇÊǧǻÉcÅ[ÉãÉ{ÉbÉNÉXä÷êîÇä‹Ç›Ç‹Ç∑Åió·Ç¶ÇŒÅAPPCBrowser ()Ç‚ResolveAlias ()ǻǫÅjÅBÉ_ÉCÉAÉçÉOÇï\é¶Ç∑ÇÈä÷êîÇÃëΩÇ≠DžǬǢǃÇÕÅAÉ_ÉCÉAÉçÉOÇï\é¶ÇµÇ»Ç¢É^ÉCÉvÇÃä÷êîǙdžÇËÇ‹Ç∑Åió·Ç¶ÇŒIPCListPorts ()Ç‚MatchAlias ()ǻǫÅjÅBBOAÇ©ÇÁÉÜÅ[ÉUÇ÷í ímÇ∑ÇÈèÍçáÇÕNotification ManagerÇóòópǵNjÇ∑ÅiÉmÅ[ÉeÉBÉtÉBÉPÅ[ÉVÉáÉìDžǬǢǃÇÕå„íˆâê‡ÇǵNjÇ∑ÅjÅB

í èÌÇÃMacintoshÉAÉvÉäÉPÅ[ÉVÉáÉìÇΔìØólÅABOAÇÕ4ǬÇÃïKê{Apple eventÇ…ëŒâûÇµÇƒÇ¢Ç»ÇØÇÍnjǻÇËÇ‹ÇπÇÒÅBì¡Ç…èdóvÇ»ÇÃÇÕÅAQuitApplication Apple eventÇ÷ÇÃëŒâûÇ≈Ç∑ÅBQuitApplicationÇ…ê≥ǵÇ≠ëŒâûÇǵǻǢÇΔBOAÇ™èIóπÇ≈Ç´Ç»Ç≠Ç»ÇËÅAMac OSé©ëÃÇ™èIóπÇ≈Ç´Ç»Ç≠Ç»ÇËÇ‹Ç∑ÅB

ÉAÉvÉäÉPÅ[ÉVÉáÉìÇÃ'SIZE'ÉäÉ\Å[ÉXÅiID = -1ÅjÇÕïKÇ∏canBackgroundÇΔbackgroundOnlyÇÃÉtÉâÉOÇÉZÉbÉgǵǃâ∫Ç≥Ç¢ÅBDZÇÃ2ǬÇÃÉtÉâÉOÇÉZÉbÉgÇ∑ÇÈDZÇΔÇ…ÇÊǡǃÅAÉAÉvÉäÉPÅ[ÉVÉáÉìÇ™BOAÇ≈džÇÈDZÇΔÇÉVÉXÉeÉÄÉ\ÉtÉgÉEÉFÉAÇ…ì`ǶNjÇ∑ÅB

ÉXÉ^ÉbÉNDžǬǢǃ

BOAÇ…äÑÇËìñǃÇÁÇÍÇÈÉXÉ^ÉbÉNÉTÉCÉYÇÕÉfÉtÉHÉãÉgÇ≈2KǵǩdžÇËÇ‹ÇπÇÒÅBDZÇÍÇÕïWèÄìIÇ»ÉAÉvÉäÉPÅ[ÉVÉáÉìÇ…äÑÇËìñǃÇÁÇÍÇÈÉfÉtÉHÉãÉgÉXÉ^ÉbÉNÉTÉCÉYÅiÉJÉâÅ[QuickDrawÇéùÇΩǻǢMacintoshÇ≈ÇÕ8KÅAÉJÉâÅ[QuickDrawÇìãç⁄ǵÇΩMacintoshÇ≈24KÅjÇÊÇËè¨Ç≥Ç¢Ç≈Ç∑ÅBPowerPCÉRÉìÉsÉÖÅ[É^Ç≈ÇÕ2KÇÃÉXÉ^ÉbÉNÉTÉCÉYÇÕdžNjÇËåªé¿ìIÇ≈ÇÕdžÇËÇ‹ÇπÇÒÅBÉäÉJÅ[ÉVÉuä÷êîÇ‚ÉXÉ^ÉbÉNÇåÉǵÇ≠óòópÇ∑ÇÈÉIÉyÉåÅ[ÉVÉáÉìÇégǧÇΔÉXÉ^ÉbÉNÇΔÉqÅ[ÉvÇ™ê⁄êGǵǃǵNjǧã∞ÇÍǙdžÇËÇ‹Ç∑ÅBDZÇÍÇÕÉäÉJÅ[ÉVÉuä÷êîÇÃïœÇÌÇËÇ…ÉãÅ[ÉvÅAÉXÉ^ÉbÉNÇÃïœÇÌÇËÇ…ÉqÅ[ÉvÇégǧDZÇΔÇ≈âÒîÇ≈Ç´Ç‹Ç∑ÅiëÂÇ´Ç»ïœêîÇ‚ÉpÉâÉÅÅ[É^ÇÃïœÇÌÇËÇ…NewHandle ()ÅANewPointer ()ÅATempNewHandle ()ǻǫÇóòópǵNjÇ∑ÅjÅBStr255ÇÃÇÊǧǻÉçÅ[ÉJÉãïœêîÇÕÇ∑ÇÆÇ…ÉXÉ^ÉbÉNÇè¡îÔǵǃǵNjǧÇÃÇ≈ÅAì¡Ç…íçà”Ç™ïKóvÇ≈Ç∑ÅB

BOAÇÃÉXÉ^ÉbÉNÉTÉCÉYÇëÂÇ´Ç≠Ç∑ÇÈïKóvǙdžÇÍÇŒÅAGetApplLimit ()ÇΔSetApplLimit ()Ç≈BOAÇÃÉqÅ[ÉvÉXÉyÅ[ÉXÇè¨Ç≥Ç≠Ç∑ÇÈDZÇΔÇ…ÇÊǡǃÅAÉXÉ^ÉbÉNÇÃóòópâ¬î\Ç»ÉGÉäÉAÇ™ämï€Ç≈Ç´Ç‹Ç∑ÅBÉqÅ[ÉvÉXÉyÅ[ÉXÇà≥èkÇ∑ÇÈèÍçáÇÕïKÇ∏MaxApplZone ()ÇåƒÇ—èoÇ∑ëOÇ…çsǡǃâ∫Ç≥Ç¢ÅB

  // Increase the space allocated for the background only application stack.
  //
  // Warning: SetApplLimit always sets the stack to at least as large as the
  //    default stack for the machine (8K on machines with original QuickDraw,
  //    24K on machines with Color QuickDraw), so the application partition
  //    must be large enough to accommodate an appropriate stack and heap.
  //    Call this only once, at the beginning of the BOA.
  //
  // Another warning:
  //    Don't bother trying to set the stack size to something lower than 24K.
  //    If SetApplLimit is called to do this, it will silently lower ApplLimit
  //    to a 24K stack. (The limit is 8K on machines without Color QuickDraw.
  //    In this sample, we don't allow an increment less than 24K.)
 
  OSErr IncreaseBOAStack (Size additionalStackSize)
  {
    OSErr retCode;
 
    // Check that we aren't running with a corrupt heap. If we are,
    // fix the problem.  This was a bug with FBA's before System 7.5.5.
    // With System Software later than 7.5.5, this "fix" is harmless.

    myZone = GetZone ();
    if (myZone->bkLim != LMGetHeapEnd ())
        LMSetHeapEnd (myZone->bkLim);
 
    // Increase the stack size by lowering the heap limit.

    SetApplLimit ((Ptr) ((unsigned long) GetApplLimit () - additionalStackSize));
    retCode = MemError ();
    if (retCode == noErr)
        MaxApplZone ();
    return retCode;
  }



Ç»Ç∫MaxApplZone ()ÇåƒÇ—èoÇ∑ëOÇ…Ç‚ÇÈÇÃÅH

MaxApplZone ()ÇÕApplLimitÅiÉçÅ[ÉÅÉÇÉäÉOÉçÅ[ÉoÉãïœêîÅjÇ≈éwíËÇ≥ÇÍǃǢÇÈÉAÉhÉåÉXÇ‹Ç≈ÉAÉvÉäÉPÅ[ÉVÉáÉìÉqÅ[ÉvÇägí£ÇµÇ‹Ç∑ÅBSetApplLimit ()ÇÕApplLimitÇÃì‡óeÇê›íËǵNjÇ∑Åiè„ãLÇÃèÍçáÇÕí èÌÇÊÇËí·Ç¢ÉAÉhÉåÉXÇ…ê›íËǵǃǢNjÇ∑ÅjÅBMaxApplZone ()ÇàÍìxåƒÇ—èoǵǃǵNjǧÇΔÅAÉAÉvÉäÉPÅ[ÉVÉáÉìÉqÅ[ÉvÇÕç≈çÇílÇ‹Ç≈ägí£Ç≥ÇÍÅAApplLimitÇïœçXǵǃLJçƒìxèkè¨Ç∑ÇÈDZÇΔÇÕÇ≈Ç´Ç‹ÇπÇÒÅBécîOǻǙÇÁSetApplLimit ()ÇÕä÷êîÇ‚MemError ()Çí Ç∂ǃÉGÉâÅ[Çï‘Ç≥ǻǢÇÃÇ≈ÅAê›íËÇ™é∏îsǵÇΩèÍçáÇÃí ímÇÕdžÇËÇ‹ÇπÇÒÅB

ÉmÅ[ÉeÉBÉtÉBÉPÅ[ÉVÉáÉì

ÉÜÅ[ÉUÇ…ëŒÇµÇƒàŸèÌéñë‘ǻǫÇÃí ímÇçsǧèÍçáÇÕNotification ManagerÇégǡǃï∂éöóÒÇï\é¶ÇµÇΩÇËÅAÉTÉEÉìÉhÇñ¬ÇÁÇ∑DZÇΔÇ™â¬î\Ç≈Ç∑ÅBǵǩǵÅABOAÇëSñ Ç…éùǡǃÇ≠ÇÈDZÇΔÇ™èoóàǻǢè„ÅABOAÇÕÉAÉvÉäÉPÅ[ÉVÉáÉìÉÅÉjÉÖÅ[DžLJåªÇÌÇÍǻǢÇÃÇ≈ÅAëΩÇ≠ÇÃÉÜÅ[ÉUÇÕBOAÇ™ìÆçÏǵǃǢÇÈÇΔåæÇ§Ç±ÇΔÇ…ãCÇ™ïtÇ´Ç‹ÇπÇÒÅBìÀëRÇÃÉmÅ[ÉeÉBÉtÉBÉPÅ[ÉVÉáÉìÇ…ÇÕã¡Ç©ÇÍÇÈÇÃÇ≈ÅAèdóvÇ»éñë‘Ç‚ÉÜÅ[ÉUÇ™âΩÇæÇ©ÇÃèàíuÇéÊÇÈïKóvǙdžÇÈèÍçáÇ…å¿Ç¡ÇƒÉmÅ[ÉeÉBÉtÉBÉPÅ[ÉVÉáÉìÇï\é¶Ç∑ÇÈDZÇΔÇä©ÇflÇ‹Ç∑ÅB

ópìrÇ…ÇÊǡǃÇÕÅABOAÇÃíÜÇ≈džǡǃLJÉÜÅ[ÉUÇ©ÇÁì¸óÕÇ‚ëÄçÏÇéÛÇØïtÇØÇÈïKóvǙdžÇËÇ‹Ç∑ÅBDZÇÃÇÊǧǻèÍçáÇÕBOAÇ©ÇÁí èÌÇÃÉAÉvÉäÉPÅ[ÉVÉáÉìÇóßÇøè„Ç∞ÇÈÇÊǧä©ÇflǃǢNjÇ∑ÅBDZÇÃÉAÉvÉäÉPÅ[ÉVÉáÉìÇÕÉÜÅ[ÉUÉCÉìÉ^ÉtÉFÅ[ÉXÇéùÇøÅAÉÜÅ[ÉUì¸óÕǻǫÇéÛÇØïtÇØÇƒÅAApple eventÇégǡǃBOAÇΔÇ‚ÇËéÊÇËÇǵNjÇ∑ÅBBOAÇÃèÍçáÇÕï`âÊÅAãyÇ—ï`âÊÇî∫ǧÇÊǧǻÉcÅ[ÉãÉ{ÉbÉNÉXä÷êîÇÕàÍêÿégǶNjÇπÇÒÇÃÇ≈Ç≤íçà”â∫Ç≥Ç¢ÅB

FinderÇΔBOAÇÃãNìÆ

BOAÇãNìÆÇ∑ÇÈï˚ñ@ÇÕÇ¢Ç≠ǬǩdžÇËÇ‹Ç∑ÅBBOAÇÃÉtÉ@ÉCÉãÉ^ÉCÉvÇ™'APPL'Ç»ÇÁí èÌÇÃÉAÉvÉäÉPÅ[ÉVÉáÉìÇΔïœÇÌÇËÇ»Ç≠ÅAFinderÇ≈äJÇ≠DZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅBÇ‹ÇΩÅAÉVÉXÉeÉÄÉ\ÉtÉgÉEÉFÉA7.xÇÃãNìÆçÄñ⁄ÉtÉHÉãÉ_Ç…BOAÇì¸ÇÍÇÈÇΔÅAMacintoshÇ™ãNìÆÇ∑ÇÈç€Ç…é©ìÆìIÇ…é¿çsÇ≥ÇÍÇ‹Ç∑ÅB

ã@î\ägí£ÉAÉvÉäÉPÅ[ÉVÉáÉìå^ÇÃBOAÇÕÉtÉ@ÉCÉãÉ^ÉCÉvÇ™'appe'ÇΔÇ»ÇËÇ‹Ç∑ÅBã@î\ägí£ÉAÉvÉäÉPÅ[ÉVÉáÉìÇÉVÉXÉeÉÄÉtÉHÉãÉ_Ç÷ÉhÉâÉbÉOÇ∑ÇÈÇΔé©ìÆìIÇ…ã@î\ägí£ÉtÉHÉãÉ_Ç÷ëóÇÁÇÍÅAãNìÆéûÇ…ëñÇËÇ‹Ç∑ÅB

'INIT'ÉäÉ\Å[ÉXÇä‹Çfiã@î\ägí£ÉAÉvÉäÉPÅ[ÉVÉáÉìÇ™ã@î\ägí£ÉtÉHÉãÉ_Ç…ì¸Ç¡ÇƒÇ¢ÇÈÇΔÅA'INIT'ÉäÉ\Å[ÉXÇÕëºÇÃã@î\ägí£ÇÃ'INIT'ÉäÉ\Å[ÉXÇΔìØólÅAãNìÆéûÇ…é¿çsÇ≥ÇÍÇ‹Ç∑ÅBDZÇÍÇÕãNìÆéûÇ…ÉAÉCÉRÉìÇï\é¶Ç∑ÇÈèÍçáÇ…ï÷óòÇ≈Ç∑ÅBÅi'INIT'ÇÃÉAÉCÉRÉìï\é¶ï˚ñ@DžǬǢǃÇÕDeveloper CD SeriesÇÃShowInitÉTÉìÉvÉãÉRÅ[ÉhÇéQèΔǵǃâ∫Ç≥Ç¢ÅjÅBBOAé©ëÃÇÕ'INIT'ÉäÉ\Å[ÉXÇ™é¿çsǵèIÇÌÇÈÇ‹Ç≈óßÇøè„Ç™ÇÁǻǢÇÃÇ≈ÅA'INIT'Ç≈ï\é¶Ç∑ÇÈÉAÉCÉRÉìÇÕBOAÇÃãNìÆèÛãµÇîΩâfÇ≈Ç´Ç‹ÇπÇÒÅBó·Ç¶ÇŒÅABOAÇ™ãNìÆÇ…é∏îsǵÇΩèÍçáÇÕÉAÉCÉRÉìÇ…Å~É}Å[ÉNÇîÌÇπÇÈÇÊǧǻDZÇΔÇÕÇ≈Ç´Ç‹ÇπÇÒÅBǵǩǵÅAíPèÉÇ…ÉAÉCÉRÉìÇï\é¶ÇµÇƒBOAÇ™ãNìÆÇµÇΩDZÇΔÇæÇØÇÉÜÅ[ÉUÇ…ì`ǶÇÈèÍçáÇÕÅA'INIT'ÉRÅ[ÉhÉäÉ\Å[ÉXÇ≈é¿åªÇ≈Ç´Ç‹Ç∑ÅB

BOAÇÕProcess ManagerÇÃLaunch Application ()ä÷êîÇégǡǃLJãNìÆÇ≈Ç´Ç‹Ç∑ÅBLaunchApplication ()ÇÕãNìÆÇ∑ÇÈÉvÉçÉZÉXÇÃÉtÉ@ÉCÉãÉ^ÉCÉvÇñ≥éãǵNjÇ∑ÇÃÇ≈ÅABOAÇÃÉtÉ@ÉCÉãÉ^ÉCÉvÇ™'APPL'ÅA'appe'ÅAǪÇÃëºÇ≈džǡǃLJãNìÆÇ≥ÇÍÇ‹Ç∑ÅB

ÉVÉXÉeÉÄÉ\ÉtÉgÉEÉFÉA7.1.1à»ç~Ç≈ÇÕÅAã@î\ägí£ÉAÉvÉäÉPÅ[ÉVÉáÉìÅiÉtÉ@ÉCÉãÉ^ÉCÉvÇ™'appe'ÅjÇ…'appe'ÉRÅ[ÉhÉäÉ\Å[ÉXÇí«â¡Ç∑ÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅB'appe'ÉRÅ[ÉhÉäÉ\Å[ÉXÇÕBOAãNìÆíºëOÇ…é¿çsÇ≥ÇÍÅAǪÇÃBOAÇãNìÆÇ∑ÇÈǩǫǧǩÇîªífǵNjÇ∑ÅB'appe'ÉRÅ[ÉhÉäÉ\Å[ÉXÇÕÉpÉâÉÅÅ[É^ÇéùÇΩǻǢPascalÇÃä÷êîÇ≈ÅABooleanÇï‘ǵNjÇ∑ÅBtrueÇï‘Ç∑ÇΔBOAÇÕǪÇÃNjNjãNìÆÇ≥ÇÍÇ‹Ç∑Ç™ÅAfalseÇï‘Ç∑ÇΔBOAÇÕãNìÆÇ≥ÇÍÇ‹ÇπÇÒÅB

à»â∫ÇÃó·ÇÕÅAÉJÉâÅ[QuickDrawÇ™ë∂ç›Ç∑ÇÈèÍçáÇæÇØBOAÇóßÇøè„Ç∞ÇÈÇΩÇflÇÃ'appe'ÉRÅ[ÉhÉäÉ\Å[ÉXÇ≈Ç∑ÅB

pascal Boolean ShouldThisBeLaunched (void)
{
    OSErr err;
    long response;

    err = Gestalt (gestaltQuickdrawVersion, &response);
    if (err == noErr && response >= gestalt8BitQD)
        return true;
    else
        return false;
}


System 7.xÇÃFinderÇÕBOAÇ™èIóπǵǃLJÅAèIóπǵÇΩDZÇΔÇä÷ímÇ≈Ç´Ç‹ÇπÇÒÅBè]ǡǃÅAÉÜÅ[ÉUÇ™É_ÉuÉãÉNÉäÉbÉNǵǃãNìÆÇ≥ÇπÇΩBOAÇÕèIóπǵǃLJÉAÉCÉRÉìÇ™ÅuégópíÜÅvÇÃNjNjécǡǃǵNjǢNjÇ∑ÅBDZÇÍÇÕï\é¶è„ÇÃñ‚ëËÇæÇØÇ»ÇÃÇ≈ÅAçƒìxÉ_ÉuÉãÉNÉäÉbÉNÇ∑ÇÈÇΔBOAÇÕê≥èÌÇ…óßÇøè„Ç™ÇËÇ‹Ç∑ÅBMac OS 8ÇÃFinderÇ≈ÇÕé¿çsíÜÇÃBOAÇÃǛǙê≥èÌÇ…ÅuégópíÜÅvÇΔǵǃåªÇÌÇÍÇ‹Ç∑ÅB

BOAÇÃÉ^ÉXÉN

ǢNjNjÇ≈íPìΔÉRÅ[ÉhÇ‚ÉhÉâÉCÉoÇ≈é¿åªÇµÇƒÇ¢ÇΩÇŸÇΔÇÒÇ«ÇÃã@î\ÇÕBOAÇ≈LJé¿åªâ¬î\Ç≈Ç∑ÅB'INIT'ÇóòópÇ∑ÇÈóùóRÇÃ1ǬDžÇÕÉOÉçÅ[ÉoÉãÇ»ÉgÉâÉbÉvÉpÉbÉ`ÇçsǧDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅBBOAÇÕÉAÉvÉäÉPÅ[ÉVÉáÉìÇ»ÇÃÇ≈ÅAÉgÉâÉbÉvÉAÉhÉåÉXÇïœçXǵǃLJÅAìKâûÇ≥ÇÍÇÈÇÃÇÕÉAÉvÉäÉPÅ[ÉVÉáÉìì‡ÇÃÇ›Ç≈Ç∑ÅB

Ç‹ÇΩÅABOAÇÕíºê⁄ï`âÊÇçsǧDZÇΔÇÕàÍêÿÇ≈Ç´Ç‹ÇπÇÒÅBàÍï˚ÅA'INIT'ÉRÅ[Éhì‡Ç©ÇÁâÊñ è„Ç…ï`âÊÇÇ∑ÇÈÇÃÇÕîÒèÌÇ…ìÔǵǢÇ≈Ç∑Ç™ÅAâ¬î\Ç≈ÇÕdžÇËÇ‹Ç∑ÅBï`âÊÇïKóvÇΔÇ∑ÇÈópìrÇ…BOAÇÕégǶNjÇπÇÒÅB

BOAÉqÅ[Évì‡Ç≈äÑÇËçûÇ›ä÷êîÇóòópÇ∑ÇÈÇÃÇÕà¿ëSÇ≈Ç∑ÅBó·Ç¶ÇŒÅATime ManagerÇÃÉ^ÉXÉNÇ‚äÆóπí ímä÷êîÇÕBOAì‡ïîDždžǡǃLJç\ǢNjÇπÇÒÅBǵǩǵÅAí èÌÇÃÉAÉvÉäÉPÅ[ÉVÉáÉìÇΔìØólÅABOAÇ™èIóπÇ∑ÇÈÇΔÉqÅ[ÉvÇÕñ≥Ç≠Ç»ÇËÇ‹Ç∑ÇÃÇ≈ÅAäÑÇËçûǛǂäÆóπí ímÇÃéÛÇØë“ÇøíÜÇÕÉAÉvÉäÉPÅ[ÉVÉáÉìÇèIóπÇ≥ÇπǻǢÇ≈â∫Ç≥Ç¢ÅBBOAÇÉXÉäÅ[ÉvÇ≥ÇπÇÈÇ…ÇÕWaitNextEvent ()Ç…ëÂÇ´Ç»ÉXÉäÅ[ÉvílÇìnǵNjÇ∑ÅBǪǵǃÅASystem 7.xà»å„Ç≈ÇÕäÑÇËçûÇ›éûÇ≈LJWakeUpProcess ()ÇåƒÇ—èoÇ∑DZÇΔÇ…ÇÊǡǃÉXÉäÅ[ÉvèÛë‘ÇâèúÇ≈Ç´Ç‹Ç∑ÅB

íËä˙ìIÇ…èàóùÇçsÇÌǻǢBOAÇÕWaitNextEvent ()åƒÇ—èoǵéûÇ…ëÂÇ´Ç»ÉXÉäÅ[ÉvílÇìnǵǃâ∫Ç≥Ç¢ÅBBOAópÇÃÉCÉxÉìÉgÇ™î≠ê∂Ç∑ÇÈÇΔÉXÉäÅ[ÉvèÛë‘ÇÕé©ìÆìIÇ…âèúÇ≥ÇÍÇ‹Ç∑ÇÃÇ≈ÅAëÂÇ´Ç»ÉXÉäÅ[ÉvílÇéwíËÇ∑ÇÈDZÇΔÇ…ÇÊǡǃÅABOAÇÃÉpÉtÉHÅ[É}ÉìÉXÇëπǻǧDZÇΔÇ»Ç≠ÅAëºÉvÉçÉZÉXÇ÷Ç≈Ç´ÇÈÇæÇØèàóùéûä‘Çè˜ÇÈDZÇΔÇ™â¬î\Ç≈Ç∑ÅBíËä˙ìIÇ…èàóùÇçsǧBOAÇÕìKìñÇ»ílÇÉXÉäÅ[ÉvílÇΔǵǃWaitNextEvent ()Ç…ìnǵNjÇ∑ÅB

ÉoÉbÉNÉOÉâÉEÉìÉhÇÃApple eventèàóù

BOAÇä‹ÇfiÉvÉçÉZÉXä‘í êMÇ…ÇÕApple eventÇ™ç≈ìKÇ»éËíiÇ≈Ç∑ÅBǵǩǵÅAÉÜÅ[ÉUëÄçÏÇïKóvÇΔÇ∑ÇÈéñë‘ÇãNDZÇ≥ǻǢÇÊǧíçà”ǵǃâ∫Ç≥Ç¢ÅBó·Ç¶ÇŒÅAÉlÉbÉgÉèÅ[ÉNè„ÇÃëºÇÃÉRÉìÉsÉÖÅ[É^ÇÃÉvÉçÉZÉXÇÉ^Å[ÉQÉbÉgǵÇΩèÍçáÅAǪÇÃÉRÉìÉsÉÖÅ[É^ÇΔÇÃí êMÉZÉbÉVÉáÉìÇ™Ç∑Ç≈Ç…ämó¶ÇµÇƒÇ¢Ç»ÇØÇÍÇŒÅAÉvÉçÉOÉâÉÄÉäÉìÉNÇÃÉ_ÉCÉAÉçÉOÇ™ï\é¶Ç≥ÇÍǃǵNjǢNjÇ∑ÅBDZÇÃÇÊǧǻéñë‘ÇîÇØÇÈÇ…ÇÕApple eventÇÃreplyÉpÉâÉÅÅ[É^Çégǡǃï‘êMÇ∑ÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅBÇ‹ÇΩÅAApple eventÇÃî≠êMÉAÉhÉåÉXÇï€ë∂ÅiAEGetAttributePtr ()Ç≈ëóÇÁÇÍǃǴÇΩApple eventÇÃkeyAddressAttrëÆê´ÇéÊÇËèoǵNjÇ∑ÅjǵǃÅAëóêMéûÇ…égǧï˚ñ@LJdžÇËÇ‹Ç∑ÅB

ÉVÉXÉeÉÄÉ\ÉtÉgÉEÉFÉA7.5.5à»ëOÇÃBOA

ÉVÉXÉeÉÄÉ\ÉtÉgÉEÉFÉA7.5.5à»ëOÇ≈ÇÕBOAÇä«óùÇ∑ÇÈProcess ManagerÇ…ÉoÉOǙdžÇËNjǵÇΩÅB2Ǭà»è„ÇÃBOAÇ™ÉCÉìÉXÉgÅ[ÉãÇ≥ÇÍǃǢÇÈÇΔÅA2Ǭñ⁄Ç…ãNìÆÇµÇΩBOAÇÕÉqÅ[ÉvÇ™âÛÇÍǃǵNjǢNjÇ∑ÅBÅià»ëOÅADZÇÃñ‚ëËÇÕPowerTalkÇÉCÉìÉXÉgÅ[ÉãǵǃǢÇÈéûÇ…ãNDZÇÈñ‚ëËÇΔǵǃÉeÉbÉNÉmÅ[ÉgÇ…ãLèqÇ≥ÇÍǃǢNjǵÇΩÅBǵǩǵÅADZÇÍÇÕíPèÉÇ…PowerTalkÇ™BOAÇÉCÉìÉXÉgÅ[ÉãǵǃǢÇΩDZÇΔÇ™å¥àˆÇ≈ǵÇΩÅBÅjDZÇÃÉoÉOÇÕMaxApplZone ()ÇåƒÇ—èoǵÇΩç€Ç…î≠ê∂ǵNjÇ∑ÅB

ÉVÉXÉeÉÄÉ\ÉtÉgÉEÉFÉA7.5.5à»ëOÇ≈DZÇÃÉoÉOÇâÒîÇ∑ÇÈÇ…ÇÕÅAÉçÅ[ÉÅÉÇÉäÇÃÉOÉçÅ[ÉoÉãïœêîHeapEndÇBOAÇÃÉ]Å[ÉìÇÃbkLimÉtÉBÅ[ÉãÉhÇΔî‰ärǵNjÇ∑ÅiBOAÇÃÉ]Å[ÉìÇÕGetZone ()Ç≈ì¸éËǵNjÇ∑ÅjÅBî‰ärǵÇΩåãâ ÅAílÇ™à·Ç¡ÇƒÇ¢ÇΩÇÁÅAtheZone->bkLimÇÃì‡óeÇHeapEndÇ…ÉRÉsÅ[ǵNjÇ∑ÅiHeapEndÇïœçXÇ∑ÇÈç€ÇÕLMSetHeapEnd ()ãyÇ—LMGetHeapEnd ()ÇÃÉAÉNÉZÉTä÷êîÇégǡǃâ∫Ç≥Ç¢ÅjÅBè„ãLÇÃéËèáÇÕïKÇ∏ÉXÉ^ÉbÉNÉTÉCÉYÇÃïœçXÇ‚MaxApplZone ()ÇåƒÇ—èoÇ∑ëOÇ…çsǡǃÇ≠ÇæÇ≥Ç¢ÅBè⁄ǵÇ≠ÇÕè„ãLÇÃÉXÉ^ÉbÉNÉTÉCÉYïœçXópÇÃÉ\Å[ÉXÉRÅ[ÉhÇÇ≤óóâ∫Ç≥Ç¢ÅB

éQçlï∂å£

çXêVì˙: 1997 îN 11 åé 19 ì˙